﻿/************************************************************************		
								RAZOR
************************************************************************/
//Cálculos
/*
	para calcular alguma operação basta colocar os números entre parenteses '()'
	@(item.Codigo + 2)
*/

//HTML
/*
	Para o RAZOR interpretar o HTML deve-se utilizar o comando 'raw'
	Html.Raw(item.Texto)
*/


//_Layout (master page)
/*
	Passar conteúdo de uma página para uma master page
	
	Na página _Layout.cshtml inclua o comando @RenderSection("AlgumNome", false)
	Depois inclua o comando nas paginas desejadas abaixo
	
	@section Footer{
		
		<p>Esse é meu conteúdo</p>
		
	}
*/

// Reference
/*
	Para adicionar referencias que você utiliza na maioria das VIEWS.
	Vá em Web.Config dentro da pasta VIEW e add a referencia dentro da tag Namespace.
*/

//GET (URL)
/*
	Pegar valor do GET na View
	@Url.RequestContext.RouteData.Values["id"]
*/
/************************************************************************		
								DATA ANNOTATION
************************************************************************/

//Indica que a classe faz referência a tal tabela do DB 
[Table("nome_tabela")]

//Indica que o atributo é uma 'primary key' no DB
[Key]

//Caso coloque o nome do atributo diferente da coluna da tabela do DB.
//indica a qual coluna o atributo se refere
[Column("id_professor")]

//Formatação de data
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]

//Indica qual o nome deve aparecer ao usuário final
[Display(Name="Data de Nascimento")]

//Validação de 'email'
[RegularExpression( "^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9]+)*\\.([a-z]{2,4})$" , ErrorMessage = "Por favor, insira um E-MAIL válido" )]

//Apenas letras
[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "NOME inválido")] //sem espaço
[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "NOME inválido")] //com espaço

//Apenas números
[RegularExpression("([0-9]+)", ErrorMessage = "Apenas números")]


//Verificar se houve alguma exceção na view
if (!Html.ViewData.ModelState.IsValid)
{}





/************************************************************************		
								Controller
************************************************************************/
//Permitir HTML
[ValidateInput(false)] 

//FormCollection
public ActionResult Create(FormCollection form)
{
	Funcionario funcionario = new Funcionario();
	funcionario.Nome = form["Nome"];
}


//LAMBDA
//FirstOrDefault X SingleOrDefault
//FirstOrDefault busca o primeiro elemento encontrado na tabela. Mais rápido
//SingleOrDefault busca o único dado, caso tenha outro dado identico uma exceção é disparada
var query1 = DB.tbluser.FirstOrDefault(u => u.Email.Equals(email) && u.Password.Equals(password));


//var list = DB.Funcionarios.Select(s => s.Nome); APENAS UMA COLUNA
//var list = DB.Funcionarios.Select(s => new {joao = s.Nome, s.Salario }); VARIAS COLUNAS
//lista = DB.Database.ExecuteSqlCommand("select * from Funcionario where id = @id", .....
//lista = DB.Funcionarios.Where(f => f.Salario.Equals(10)).ToList();
//string nome = lista.Select(f => f.Nome).ToString(); busca dentro da lista








/************************************************************************		
								Situations
************************************************************************/
// Redirecionar para uma página amigável quando houver um erro

/* Para redirecionar o qualquer tipo de erro a uma única página utilize <customErrors mode="On" />
		On - Qualquer erro será redirecionado para a página definida.
		RemoteOnly - Quando você estiver rodando a aplicação local, o erro será exibido. Quando estiver rodando remotamente, será redirecionado.
		Off - O erro sempre será exibido.

   Para redirecionar algum erro específico utilize <error statusCode="404" redirect="frmNaoEncontrada.aspx" />
		404 - Página não encontrada (File not found)
		403 - Acesso negado (Access denied)
		500 - Erro no servidor (Server error)
		
	Ex.:
	<configuration>
		<system.web>
			<customErrors mode="On" defaultRedirect="frmErro.aspx">
				<error statusCode="404" redirect="frmNaoEncontrada.aspx" />
			</customErrors>
		</system.web>
	</configuration>

	

	
/************************************************************************		
								ENTITY	DBCONTEXT(MODEL)
************************************************************************/

public class Context : DbContext
{
	public DbSet<Professor> professor { get; set; }
	
	/*
	*Adicionamos no construtor uma instrução para recriar o banco de dados sempre que o modelo for modificado
	*/
	public Context()
	{ 
		Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
	}
	
	/*
	*O método abaixo evita que o Entity Framework pluralize as suas tabelas no banco de dados.
	*Ex.: minha tabela no banco de dados se chama 'professor', caso eu não utilize o método
	*abaixo, ele acrescentaria automáticamente a letra 'S' ou 'ES'
	*/
	protected override void OnModelCreating(DbModelBuilder modelBuilder)
	{
		modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
	}
}



/************************************************************************		
								CONEXÃO
************************************************************************/

//MySQL local
<connectionStrings>
<add name="Context"
	 connectionString="Server=localhost; Database=escola; Uid=root; Pwd=;"
	 providerName="MySql.Data.MySqlClient"/>
</connectionStrings>

  <connectionStrings>
    <add name="Context" 
         connectionString="server=127.0.0.1;User Id=root;password=;Persist Security Info=True;database=escola" 
         providerName="MySql.Data.MySqlClient" />
  </connectionStrings>



